import { PartialType } from "@nestjs/swagger";
import { Type } from "class-transformer";
import { IsArray, IsNotEmpty, IsNumber, IsOptional, IsString, ValidateNested } from "class-validator";

export class ContractCntrCreateDto {
    @IsNotEmpty({
        message: '委托箱量编号不能为空'
    })
    contract_cntr_sum_id: number;

    @IsArray()
    @IsString({ each: true }) // 对数组中的每个元素应用验证
    @Type(() => String) // 使用class-transformer确保类型安全
    cntrs: string[];
}


export class ContractCntrSumCreateDto {

    @IsNotEmpty({
        message: '委托号不能为空'
    })
    contract_id: number;

    @IsNotEmpty({
        message: '尺寸不能为空'
    })
    cntr_siz_cod: string;

    @IsNotEmpty({
        message: '箱型不能为空'
    })
    cntr_typ_cod: string;

    @IsNotEmpty({
        message: '箱量不能为空'
    })
    cntr_num: number;

    /* @IsArray()
    @ValidateNested({ each: true }) // 对数组中的每个元素应用验证
    @Type(() => String) // 使用class-transformer确保类型安全
    @IsOptional()
    cntrs: string[]; */
}

export class ContractTransCreateDto {
    @IsNotEmpty({
        message: '委托号不能为空'
    })
    contract_id: number;

    @IsOptional()
    seq: number;

    @IsNotEmpty({
        message: '起运地不能为空'
    })
    depart_place: string;

    @IsNotEmpty({
        message: '目的地不能为空'
    })
    dest_place: string;
}

export class ContractCreateDto {
    @IsNotEmpty({
        message: '客户不能为空'
    })
    client_cod: number;

    @IsNotEmpty({
        message: '发货人不能为空'
    })
    shipper: string;

    @IsNotEmpty({
        message: '收货人不能为空'
    })
    consignee: string;

    @IsOptional()
    ship_nam: string;
    @IsOptional()
    voyage: string;

    @IsNotEmpty({
        message: '提单号不能为空'
    })
    bill_no: string;

    @IsOptional()
    depart_port: string;
    @IsOptional()
    dest_port: string;
    @IsOptional()
    cargo_netwgt: number;
    @IsOptional()
    cargo_scalewgt: number;
    @IsOptional()
    cargo_volume: number;
    @IsOptional()
    cargo_quantity: number;

    @IsNotEmpty({
        message: '运输方式不能为空'
    })
    trans_kind: string;
    @IsNotEmpty({
        message: '付款方式不能为空'
    })
    pay_kind: string;

    /* @IsArray()
    @ValidateNested({ each: true }) // 对数组中的每个元素应用验证
    @Type(() => ContractCntrSumCreateDto) // 使用class-transformer确保类型安全
    @IsOptional()
    cntr_sums?: ContractCntrSumCreateDto[]; */

    /* @IsArray()
    @ValidateNested({ each: true }) // 对数组中的每个元素应用验证
    @Type(() => ContractCntrCreateDto) // 使用class-transformer确保类型安全
    @IsOptional()
    cntrs: ContractCntrCreateDto[]; */

    /* @IsArray()
    @ValidateNested({ each: true }) // 对数组中的每个元素应用验证
    @Type(() => ContractTransCreateDto) // 使用class-transformer确保类型安全
    @IsOptional()
    trans?: ContractTransCreateDto[]; */
}
export class ContractFeedetCreateDto {
    @IsNotEmpty({
        message: 'contract.id不能为空'
    })
    contract_id: number;

    @IsNotEmpty({
        message: '客户不能为空'
    })
    fee_unit_cod: number;

    @IsNotEmpty({
        message: '成本中心不能为空'
    })
    fee_owner: number;

    @IsNotEmpty({
        message: '费目类型不能为空'
    })
    fee_typ_cod: string;

    @IsNotEmpty({
        message: '费目不能为空'
    })
    fee_cod: string;

    @IsOptional()
    fee_value: number;

    @IsOptional()
    fee_ton: number;

    @IsNotEmpty({
        message: '金额不能为空'
    })
    amount: number;

    @IsNotEmpty({
        message: '货币不能为空'
    })
    currency_cod: string;

    @IsOptional()
    fee_nam: string;
    @IsNotEmpty({
        message: '计费时间不能为空'
    })
    fee_tim: Date;

    @IsNotEmpty({
        message: '收付款不能为空'
    })
    fee_in_out: string;

    @IsOptional()
    remark: string;
}
export class ContractUpdateDto extends PartialType(ContractCreateDto) {
    @IsNumber(
        {},
        {
            message: '缺少id',
        },
    )
    id: number;
}

export class ContractCntrSumUpdateDto extends PartialType(ContractCntrSumCreateDto) {
    @IsNumber(
        {},
        {
            message: '缺少id',
        },
    )
    id: number;
}

export class ContractTransUpdateDto extends PartialType(ContractTransCreateDto) {
    @IsNumber(
        {},
        {
            message: '缺少id',
        },
    )
    id: number;
}

export class ContractFeedetsUpdateDto extends PartialType(ContractFeedetCreateDto) {
    @IsNumber(
        {},
        {
            message: '缺少id',
        },
    )
    id: number;
}